/**
 * @author Vitor Franco do Carmo (vfcarmo@gmail.com)
 * @since 04/10/2013
 *
 */
package br.com.vfcfw.test.functional.exemplo;

import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;

import br.com.vfcfw.test.BaseTesteFuncional;
import br.com.vfcfw.test.functional.BasePagina;


/**
 * Classe que representa a página de login do GUJ.
 * 
 * @author Vitor Franco do Carmo (vfcarmo@gmail.com)
 * @since 04/10/2013
 * 
 */
public class GujLogin extends BasePagina {

    @FindBy(xpath = "/html/body/div[2]/div/div[1]/form/input[1]")
    private WebElement txtLogin;

    @FindBy(xpath = "/html/body/div[2]/div/div[1]/form/input[2]")
    private WebElement txtPassword;

    @FindBy(xpath = "/html/body/div[2]/div/div[1]/form/input[4]")
    private WebElement btnLogin;

    @FindBy(xpath = "/html/body/div[2]/ul/li")
    private WebElement lblMsgErro;

    @FindBy(xpath = "/html/body/header/section[2]/div[1]/section/nav/ul/li[2]/a")
    private WebElement lnkSair;

    /**
     * Construtor da classe.
     */
    public GujLogin() {

        super(BaseTesteFuncional.obterDriverAtual());
    }

    /**
     * Verifica se o login no GUJ foi realizado com sucesso.
     * 
     * @return <tt>TRUE</tt> se o login foi realizado com sucesso, <tt>FALSE</tt> caso contrário.
     */
    public boolean loginComSucesso() {

        login("vfcarmo@gmail.com", "010796");
        comandos.esperarElementoVisivel(lnkSair);

        return comandos.isVisivel(lnkSair);
    }

    /**
     * Verifica se o login no GUJ foi realizado com erro.
     * 
     * @return <tt>TRUE</tt> se o login foi realizado com erro, <tt>FALSE</tt> caso contrário.
     */
    public boolean loginComErro() {

        login("vfcarmo@gmail.com", "123456");
        comandos.esperarElementoVisivel(lblMsgErro);

        return comandos.isElementoContemTexto(lblMsgErro, "Não foi possível logar seu email e senha");
    }

    /**
     * Realiza o login com sucesso no GUJ.
     * 
     * @return {@link GujPerfil}.
     */
    public GujPerfil loginOk() {

        login("vfcarmo@gmail.com", "010796");

        return obterProximaPagina(GujPerfil.class);
    }

    /**
     * Loga no GUJ.
     * 
     * @param login Login (email).
     * @param password Senha.
     */
    private void login(String login, String password) {

        comandos.esperarElementoVisivel(txtLogin);
        comandos.definirValor(txtLogin, login);
        comandos.definirValor(txtPassword, password);
        comandos.clicar(btnLogin);
    }

}
